package com.sj.uabrowser.app;

import android.app.Application;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.support.annotation.Nullable;
import android.support.multidex.MultiDex;

import com.facebook.stetho.Stetho;
import com.orhanobut.logger.AndroidLogAdapter;
import com.orhanobut.logger.Logger;
import com.sj.uabrowser.BuildConfig;
import com.sj.uabrowser.db.gen.DaoMaster;
import com.sj.uabrowser.db.gen.DaoSession;
import com.sj.uabrowser.db.util.MyOpenHelper;
import com.umeng.analytics.MobclickAgent;
import com.umeng.commonsdk.UMConfigure;

public class TApp extends Application {

    private static TApp mInstance;
    private static DaoMaster mDaoMaster;
    private static DaoSession mDaoSession;

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(base);
    }

    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
        Util.init(this);
        initLogger();
        initUM();
        setDatabase();
    }

    public static TApp getInstance(){
        return mInstance;
    }


    private void initUM() {
        // 在此处调用基础组件包提供的初始化函数 相应信息可在应用管理 -> 应用信息 中找到 http://message.umeng.com/list/apps
// 参数一：当前上下文context；
// 参数二：应用申请的Appkey（需替换）；
// 参数三：渠道名称；
// 参数四：设备类型，必须参数，传参数为UMConfigure.DEVICE_TYPE_PHONE则表示手机；传参数为UMConfigure.DEVICE_TYPE_BOX则表示盒子；默认为手机；
// 参数五：Push推送业务的secret 填充Umeng Message Secret对应信息（需替换）
        if (BuildConfig.UM) {
            UMConfigure.init(mInstance, "5d6de1803fc195f63b000018", Util.getChannelName(), UMConfigure.DEVICE_TYPE_PHONE, "");
            // 选用AUTO页面采集模式
//            MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO);
            UMConfigure.setLogEnabled(true);
            // 选用LEGACY_AUTO页面采集模式
            MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.LEGACY_MANUAL);
//            String[] devInfos = getTestDeviceInfo(mInstance);
//            Log.e("devInfos",devInfos[0]+","+devInfos[1]);
        }

    }

    private void initLogger() {
        Logger.addLogAdapter(new AndroidLogAdapter() {
            @Override
            public boolean isLoggable(int priority, @Nullable String tag) {
                return BuildConfig.LOGGER;
            }
        });
        Stetho.initializeWithDefaults(this);
    }

    /*
     * 设置greenDao
     */
    private void setDatabase() {
        // 通过 DaoMaster 的内部类 DevOpenHelper，你可以得到一个便利的 SQLiteOpenHelper 对象。
        // 可能你已经注意到了，你并不需要去编写「CREATE TABLE」这样的 SQL 语句，因为 greenDAO 已经帮你做了。
        // 注意：默认的 DaoMaster.DevOpenHelper 会在数据库升级时，删除所有的表，意味着这将导致数据的丢失。
        // 所以，在正式的项目中，你还应该做一层封装，来实现数据库的安全升级。
        // mHelper = new Helper(new GreenDaoUtils(this));
        DaoMaster.OpenHelper mHelper = null;
        mHelper = new MyOpenHelper(this, "uabrowser", null);
        SQLiteDatabase db = mHelper.getWritableDatabase();
        // 注意：该数据库连接属于 DaoMaster，所以多个 Session 指的是相同的数据库连接。
        mDaoMaster = new DaoMaster(db);
        mDaoSession = mDaoMaster.newSession();
    }

    public static DaoSession getDaoSession() {
        return mDaoSession;
    }
}
